package pagin

import "math"

type Paginator struct {
	Total   int // 总页数
	First   int // 第一页
	Last    int // 下一页
	Current int // 当前页
	pages   int
	limit   int
	count   int
}

// NewPaginator 当前页数，每页文件数量，总文件数量
func NewPaginator(pages, limit, count int) *Paginator {
	return &Paginator{pages: pages, limit: limit, count: count}
}

func (p *Paginator) GetTotal() int {
	return p.Total
}

// Do 分页方法，根据传递过来的页数，每页数，总数，返回分页的内容 7个页数 前 1，2，3，4，5 后 的格式返回,小于5页返回具体页数
func (p *Paginator) Do() *Paginator {
	var firstPage int //前一页地址
	var lastPage int  //后一页地址
	// 根据总数，和每页数量 生成分页总数
	totalPages := int(math.Ceil(float64(p.count) / float64(p.limit))) //page总数
	if p.pages > totalPages {
		p.pages = totalPages
	}
	if p.pages <= 0 {
		p.pages = 1
	}
	var pages []int
	switch {
	case p.pages >= totalPages-5 && totalPages > 5: //最后5页
		start := totalPages - 5 + 1
		firstPage = p.pages - 1
		lastPage = int(math.Min(float64(totalPages), float64(p.pages+1)))
		pages = make([]int, 5)
		for i, _ := range pages {
			pages[i] = start + i
		}
	case p.pages >= 3 && totalPages > 5:
		start := p.pages - 3 + 1
		pages = make([]int, 5)
		firstPage = p.pages - 3
		for i, _ := range pages {
			pages[i] = start + i
		}
		firstPage = p.pages - 1
		lastPage = p.pages + 1
	default:
		pages = make([]int, int(math.Min(5, float64(totalPages))))
		for i, _ := range pages {
			pages[i] = i + 1
		}
		firstPage = int(math.Max(float64(1), float64(p.pages-1)))
		lastPage = p.pages + 1
	}
	p.Total = totalPages
	p.First = firstPage
	p.Last = lastPage
	p.Current = p.pages
	return p
}
